package clases.academico;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import clases.general.Personal;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class MateriaDocente extends MateriaPeriodoCurso {

    private int idmateriadocente;
    private int horas;
    private String observacion;
    private DataSource dt;
    private String sql;
    public Personal docente;

    public MateriaDocente() {
        dt = new DataSource();
        docente = new Personal();
    }

    public int getIdmateriadocente() {
        return idmateriadocente;
    }

    public void setIdmateriadocente(int idmateriadocente) {
        this.idmateriadocente = idmateriadocente;
    }

    public int getHoras() {
        return horas;
    }

    public void setHoras(int horas) {
        this.horas = horas;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public void guardarMateriaDocente() {
        this.idmateriadocente = Sql.getMax("IDMATERIADOCENTE", "MATERIADOCENTE", true);
        sql = "INSERT INTO MATERIADOCENTE VALUES (" + this.idmateriadocente + ", '"
                + this.docente.getCedulaRuc() + "', " + this.getIdmateriaperiodocurso() + ", "
                + "'" + this.horas + "', '" + this.observacion + "')";
        System.out.println(sql);
        Sql.insertar(sql);

    }

    public boolean ExistenciaAsignacionDocente(String curso, String materia, String docente) {
        sql = "SELECT * FROM MATERIADOCENTE WHERE IDMATERIAPERIODOCURSO \n"
                + "IN (SELECT IDMATERIAPERIODOCURSO FROM MATERIAPERIODOCURSO WHERE IDPERIODOCURSO \n"
                + "IN (SELECT IDPERIODOCURSO FROM PERIODOCURSO WHERE IDCURSO IN \n"
                + "(SELECT IDCURSO FROM CURSO JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "') \n"
                + "AND IDPERIODO IN (SELECT IDPERIODO FROM PERIODO \n"
                + "WHERE ESTADO=TRUE)) \n"
                + "AND IDMATERIA IN (SELECT IDMATERIA \n"
                + "FROM MATERIA WHERE MATERIA='" + materia + "') ) \n"
                + "AND CEDULARUC IN (SELECT PERSONAL.CEDULARUC FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + docente + "') ";

        return Sql.isExiste(sql);
    }

     public void eliminarMateriaDocente(String curso, String materia, String docente) {
        sql = "DELETE FROM MATERIADOCENTE WHERE IDMATERIAPERIODOCURSO \n"
                + "IN (SELECT IDMATERIAPERIODOCURSO FROM MATERIAPERIODOCURSO WHERE IDPERIODOCURSO \n"
                + "IN (SELECT IDPERIODOCURSO FROM PERIODOCURSO WHERE IDCURSO IN \n"
                + "(SELECT IDCURSO FROM CURSO JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "') \n"
                + "AND IDPERIODO IN (SELECT IDPERIODO FROM PERIODO \n"
                + "WHERE ESTADO=TRUE)) \n"
                + "AND IDMATERIA IN (SELECT IDMATERIA \n"
                + "FROM MATERIA WHERE MATERIA='" + materia + "') ) \n"
                + "AND CEDULARUC IN (SELECT PERSONAL.CEDULARUC FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + docente + "') ";
        Sql.eliminar(sql);

    }

    public void listaMateriaNoAsignadaDocente(JList lista, DefaultListModel modelo, String curso) {
        sql = "SELECT MATERIA FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO NOT IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "' "
                + "AND PERIODO.ESTADO=TRUE ORDER BY(MATERIA)";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            modelo.addElement(dt.getString(1));
            lista.setModel(modelo);
        }
        lista.setSelectedIndex(0);
    }

    public void listaMateriaAsignadaDocente(JTable tabla, DefaultTableModel modelo, String docente) {
        sql = "SELECT MATERIA, CONCAT(CURSO,' ',PARALELO), HORAS FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN MATERIADOCENTE ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO "
                + "JOIN PERSONAL ON PERSONAL.CEDULARUC=MATERIADOCENTE.CEDULARUC "
                + "JOIN PERSONA ON PERSONAL.CEDULARUC=PERSONA.CEDULARUC "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND CONCAT(APELLIDO,' ', NOMBRE)='" + docente + "' "
                + "AND PERIODO.ESTADO=TRUE "
                + "ORDER BY(CONCAT(CURSO,' ',PARALELO), MATERIA)";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            String[] fila = new String[3];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            modelo.addRow(fila);
        }
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void ConsultacursomateriaDocente(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("MATERIA");
        modelo.addColumn("CURSO");
        modelo.addColumn("DOCENTE");
        modelo.addColumn("HORAS");

        DefaultTableCellRenderer centrar = new DefaultTableCellRenderer();
        centrar.setHorizontalAlignment(SwingConstants.CENTER);
        tabla.getColumnModel().getColumn(3).setCellRenderer(centrar);
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(350);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(350);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(350);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(60);
        sql = objPaginacion.getPaginacion(sql, pagina, 25);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[4];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            fila[3] = dt.getString(4);
            modelo.addRow(fila);

        }

        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public String SqlCursomateriaDocente() {
        sql = "SELECT MATERIA, CONCAT(CURSO,' ',PARALELO), "
                + "CONCAT(APELLIDO,' ', NOMBRE), HORAS FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN MATERIADOCENTE ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO "
                + "JOIN PERSONAL ON PERSONAL.CEDULARUC=MATERIADOCENTE.CEDULARUC "
                + "JOIN PERSONA ON PERSONAL.CEDULARUC=PERSONA.CEDULARUC "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND PERIODO.ESTADO=TRUE "
                + "ORDER BY(CONCAT(CURSO,' ',PARALELO), MATERIA, CONCAT(APELLIDO,' ', NOMBRE))";
        return sql;
    }

    public String SqlCursomateriaDocentecurso(String Curso) {
        sql = "SELECT MATERIA, CONCAT(CURSO,' ',PARALELO), "
                + "CONCAT(APELLIDO,' ', NOMBRE), HORAS FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN MATERIADOCENTE ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO "
                + "JOIN PERSONAL ON PERSONAL.CEDULARUC=MATERIADOCENTE.CEDULARUC "
                + "JOIN PERSONA ON PERSONAL.CEDULARUC=PERSONA.CEDULARUC "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND PERIODO.ESTADO=TRUE "
                + "AND CONCAT(CURSO,' ',PARALELO) LIKE ('" + Curso + "%') "
                + "ORDER BY(CONCAT(CURSO,' ',PARALELO), MATERIA, CONCAT(APELLIDO,' ', NOMBRE))";
        return sql;
    }

    public String SqlCursomateriaDocentemateria(String Materia) {
        sql = "SELECT MATERIA, CONCAT(CURSO,' ',PARALELO), "
                + "CONCAT(APELLIDO,' ', NOMBRE), HORAS FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN MATERIADOCENTE ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO "
                + "JOIN PERSONAL ON PERSONAL.CEDULARUC=MATERIADOCENTE.CEDULARUC "
                + "JOIN PERSONA ON PERSONAL.CEDULARUC=PERSONA.CEDULARUC "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND PERIODO.ESTADO=TRUE "
                + "AND MATERIA LIKE ('" + Materia + "%') "
                + "ORDER BY(CONCAT(CURSO,' ',PARALELO), MATERIA, CONCAT(APELLIDO,' ', NOMBRE))";
        return sql;
    }

    public String SqlCursomateriaDocentedocente(String docente) {
        sql = "SELECT MATERIA, CONCAT(CURSO,' ',PARALELO), "
                + "CONCAT(APELLIDO,' ', NOMBRE), HORAS FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN MATERIADOCENTE ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO "
                + "JOIN PERSONAL ON PERSONAL.CEDULARUC=MATERIADOCENTE.CEDULARUC "
                + "JOIN PERSONA ON PERSONAL.CEDULARUC=PERSONA.CEDULARUC "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND PERIODO.ESTADO=TRUE "
                + "AND CONCAT(APELLIDO,' ', NOMBRE) LIKE ('" + docente + "%') "
                + "ORDER BY(CONCAT(CURSO,' ',PARALELO), MATERIA, CONCAT(APELLIDO,' ', NOMBRE))";
        return sql;
    }

    public String SqlCursomateriaDocentehoras(int hora) {
        sql = "SELECT MATERIA, CONCAT(CURSO,' ',PARALELO), "
                + "CONCAT(APELLIDO,' ', NOMBRE), HORAS FROM MATERIAPERIODOCURSO "
                + "JOIN MATERIA ON MATERIA.IDMATERIA=MATERIAPERIODOCURSO.IDMATERIA "
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDPERIODOCURSO=MATERIAPERIODOCURSO.IDPERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "JOIN MATERIADOCENTE ON MATERIADOCENTE.IDMATERIAPERIODOCURSO=MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO "
                + "JOIN PERSONAL ON PERSONAL.CEDULARUC=MATERIADOCENTE.CEDULARUC "
                + "JOIN PERSONA ON PERSONAL.CEDULARUC=PERSONA.CEDULARUC "
                + "WHERE MATERIAPERIODOCURSO.IDMATERIAPERIODOCURSO IN "
                + "(SELECT IDMATERIAPERIODOCURSO FROM MATERIADOCENTE) "
                + "AND PERIODO.ESTADO=TRUE AND HORAS=" + hora + " "
                + "ORDER BY(CONCAT(CURSO,' ',PARALELO), MATERIA, CONCAT(APELLIDO,' ', NOMBRE))";
        return sql;
    }

}
